package test_312;

import java.util.*;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: 张杰
 * Date: 2022-03-13
 * Time: 17:25
 */
public class MapTestDemo {
    //统计10000个数中每个数出现的次数
    public static Map<Integer,Integer> func1(int[] array) {
        Map<Integer,Integer> map = new HashMap<>();
        //判断array中的元素，是否在map当中，如果不在就是就添加元素并置1，如果在就在原来的基础上+1
        for (int i = 0; i < array.length ; i++) {
            if(map.get(array[i]) == null) {
                map.put(array[i],1);
            }else {
                int val = map.get(array[i]);
                map.put(array[i],val+1);
            }
        }
        return map;
    }

    //数据去重
    public static int func2(int[] array) {
        HashSet<Integer> set = new HashSet<>();
        for (Integer x:array) {
           if(set.contains(x)) {
               return x;
           }
           set.add(x);
        }
        return -1;
    }

    //给定一个非空整数数组，除了某个元素只出现一次以外，
    // 其余每个元素均出现两次。找出那个只出现了一次的元素。
    public static int func3(int[] array) {
        HashSet<Integer> set = new HashSet<>();
        for (int x:array) {
            if(set.contains(x)) {
                set.remove(x);
            }else {
                set.add(x);
            }
        }
        for (int i = 0; i < array.length ; i++) {
            if(set.contains(array[i])) {
                return array[i];
            }
        }
        return -1;
    }

    public static void main(String[] args) {
        int[] array = new int[10000];
        Random random = new Random();
        for (int i = 0; i < array.length; i++) {
            array[i] = random.nextInt(1000);
        }

        Map<Integer,Integer> map = func1(array);
        System.out.println(map);
    }
    public static void main2(String[] args) {
        Set<Integer> set = new HashSet<>();
        set.add(1);
        set.add(2);
        //set.add(2);//自动去重
        set.add(3);
        System.out.println(set);
        //迭代器
        Iterator<Integer> iterator = set.iterator();
        while(iterator.hasNext()) {
            System.out.println(iterator.next());
        }
    }
    public static void main1(String[] args) {
        Map<String,Integer> map = new HashMap<>();
        map.put("abc",3);
        map.put("bit",2);
        //map.put("bit",6);//村拿出元素的时候，要注意key如果相同，value值会被覆盖
        map.put("hello",6);
        map.put(null,null);//hashMap可以存储null，TreeMap不可以会报错。
        System.out.println(map);

        //将map的所有元素key和value值对应输出
        Set<Map.Entry<String,Integer>> entrySet = map.entrySet();
        for (Map.Entry<String,Integer> entry:entrySet) {
            System.out.println(entry.getKey()+"->"+entry.getValue());
        }
        
        int ret1 = map.get("bit");//通过key，获取对应的val值
        System.out.println(ret1);
        System.out.println(map.get("bit2"));//不存在的值如果赋给一个引用再打印，就会出现空指针异常。
        System.out.println(map.getOrDefault("bit2",98));//不存在key值时就会返回98

        /*Integer ret2 = map.remove("bit");
        System.out.println(ret2);
        System.out.println(map);*/

        Set<String> str = map.keySet();//Set这个集合当中，存储的元素，都是不重复的
        System.out.println(str);

    }
}
